package com.qms.app.service.impl;

import com.qms.app.bean.Users;
import com.qms.app.dao.UsersDao;
import com.qms.app.service.UsersService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UsersServiceImpl implements UsersService {
    @Autowired
    private UsersDao usersDao;

    @Override
    public Users login(String username) {
        return usersDao.login(username);
    }

    @Override
    public List<Users> listUsers(int page, int rows, String uname) {

        Users users = (Users) SecurityUtils.getSubject().getSession().getAttribute("user");
        // 对其登录进入的用户进行判断 是否是管理员身份 0表示管理员  可以看到所有的用户
        if (users.getList().get(0).getRname().equals("0")) {
            return usersDao.list((page - 1) * rows, rows, null);
        } else {
            //  此处对自身的session.user 进行带入参数  表示只能查询自己的名字
            return usersDao.list((page - 1) * rows, rows, users.getUname());
        }

    }

    @Override
    public int countUsers(String uname) {
        Users users = (Users) SecurityUtils.getSubject().getSession().getAttribute("user");
        return usersDao.count(users.getUname());
    }

    @Override
    public boolean saveUser(Users users) {
        //用户名称+密码=加密后的密码  再用户的添加的时候  进行加密
        users.setPassword(new Md5Hash(users.getPassword(),
                users.getUname() + users.getPassword(),
                1000).toString());
        return usersDao.save(users) > 0;
    }

    @Override
    public boolean removeUsers(List<Integer> uids) {
        return usersDao.remove(uids) > 0;
    }

    @Override
    public boolean updateUsers(Users users) {
        // 修改对应的密码和账号 依然进行一次加密处理
        users.setPassword(new Md5Hash(users.getPassword(),
                users.getUname() + users.getPassword(),
                1000).toString());
        return usersDao.update(users) > 0;
    }

    @Override
    public int changeUserStat(int uid) {
        // 对这个方法中的内容 进行改正之后  就需要 再update中进行对这个方法的更正
        Users users = usersDao.get(uid);
        if (users.getList().get(0).getRname().equals("0")) {
            //  表示管理员用户  不能对自己的状态进行更改  只能对普通用户进行更改
            return -1;
        } else {
            if (users.getStat() == 0 || users.getStat()==null) {
                users.setStat(1);
            } else if (users.getStat() == 1) {
                users.setStat(0);
            }
            return usersDao.update(users);
        }
    }

    @Override
    public List<Users> countSexTimes() {
        return usersDao.countSexTimes();
    }
}
